/*
 * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
/*
 * Copyright 2003-2004 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/*
 * $Id: XSLOutputAttributes.java,v 1.2.4.1 2005/09/15 08:15:32 suresh_emailid Exp $
 */
package com.sun.org.apache.xml.internal.serializer;

import java.util.Vector;

/**
 * This interface has methods associated with the XSLT xsl:output attribues
 * specified in the stylesheet that effect the format of the document output.
 *
 * In an XSLT stylesheet these attributes appear for example as:
 * <pre>
 * <xsl:output method="xml" omit-xml-declaration="no" indent="yes"/>
 * </pre>
 * The xsl:output attributes covered in this interface are:
 * <pre>
 * version
 * encoding
 * omit-xml-declarations
 * standalone
 * doctype-public
 * doctype-system
 * cdata-section-elements
 * indent
 * media-type
 * </pre>
 *
 * The one attribute not covered in this interface is <code>method</code> as
 * this value is implicitly chosen by the serializer that is created, for
 * example ToXMLStream vs. ToHTMLStream or another one.
 *
 * This interface is only used internally within Xalan.
 *
 * @xsl.usage internal
 */
interface XSLOutputAttributes {

  /**
   * Returns the previously set value of the value to be used as the public
   * identifier in the document type declaration (DTD).
   *
   * @return the public identifier to be used in the DOCTYPE declaration in the output document.
   */
  public String getDoctypePublic();

  /**
   * Returns the previously set value of the value to be used
   * as the system identifier in the document type declaration (DTD).
   *
   * @return the system identifier to be used in the DOCTYPE declaration in the output document.
   */
  public String getDoctypeSystem();

  /**
   * @return the character encoding to be used in the output document.
   */
  public String getEncoding();

  /**
   * @return true if the output document should be indented to visually indicate its structure.
   */
  public boolean getIndent();

  /**
   * @return the number of spaces to indent for each indentation level.
   */
  public int getIndentAmount();

  /**
   * @return the mediatype the media-type or MIME type associated with the output document.
   */
  public String getMediaType();

  /**
   * @return true if the XML declaration is to be omitted from the output document.
   */
  public boolean getOmitXMLDeclaration();

  /**
   * @return a value of "yes" if the <code>standalone</code> delaration is to be included in the
   * output document.
   */
  public String getStandalone();

  /**
   * @return the version of the output format.
   */
  public String getVersion();


  /**
   * Sets the value coming from the xsl:output cdata-section-elements
   * stylesheet property.
   *
   * This sets the elements whose text elements are to be output as CDATA
   * sections.
   *
   * @param URI_and_localNames pairs of namespace URI and local names that identify elements whose
   * text elements are to be output as CDATA sections. The namespace of the local element must be
   * the given URI to match. The qName is not given because the prefix does not matter, only the
   * namespace URI to which that prefix would map matters, so the prefix itself is not relevant in
   * specifying which elements have their text to be output as CDATA sections.
   */
  public void setCdataSectionElements(Vector URI_and_localNames);

  /**
   * Set the value coming from the xsl:output doctype-public and doctype-system stylesheet
   * properties
   *
   * @param system the system identifier to be used in the DOCTYPE declaration in the output
   * document.
   * @param pub the public identifier to be used in the DOCTYPE declaration in the output document.
   */
  public void setDoctype(String system, String pub);

  /**
   * Set the value coming from the xsl:output doctype-public stylesheet attribute.
   *
   * @param doctype the public identifier to be used in the DOCTYPE declaration in the output
   * document.
   */
  public void setDoctypePublic(String doctype);

  /**
   * Set the value coming from the xsl:output doctype-system stylesheet attribute.
   *
   * @param doctype the system identifier to be used in the DOCTYPE declaration in the output
   * document.
   */
  public void setDoctypeSystem(String doctype);

  /**
   * Sets the character encoding coming from the xsl:output encoding stylesheet attribute.
   *
   * @param encoding the character encoding
   */
  public void setEncoding(String encoding);

  /**
   * Sets the value coming from the xsl:output indent stylesheet
   * attribute.
   *
   * @param indent true if the output document should be indented to visually indicate its
   * structure.
   */
  public void setIndent(boolean indent);

  /**
   * Sets the value coming from the xsl:output media-type stylesheet attribute.
   *
   * @param mediatype the media-type or MIME type associated with the output document.
   */
  public void setMediaType(String mediatype);

  /**
   * Sets the value coming from the xsl:output omit-xml-declaration stylesheet attribute
   *
   * @param b true if the XML declaration is to be omitted from the output document.
   */
  public void setOmitXMLDeclaration(boolean b);

  /**
   * Sets the value coming from the xsl:output standalone stylesheet attribute.
   *
   * @param standalone a value of "yes" indicates that the <code>standalone</code> delaration is to
   * be included in the output document.
   */
  public void setStandalone(String standalone);

  /**
   * Sets the value coming from the xsl:output version attribute.
   *
   * @param version the version of the output format.
   */
  public void setVersion(String version);

}
